#ifndef DAILYSCHEDULE_H
#define DAILYSCHEDULE_H

#include <QWidget>
#include <QTableWidget>
#include <QPushButton>
#include <QLabel>
#include <QSlider>
#include <QSpinBox>
#include <QComboBox>
#include <QDateEdit>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGroupBox>
#include <QMessageBox>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonDocument>
#include <QFile>
#include <QDir>
#include <QTimeEdit>
#include <QHeaderView>
#include <QScrollBar>
#include <QAudioSource>
#include <qlistwidget.h>

class DailySchedule : public QWidget
{
    Q_OBJECT

public:
    explicit DailySchedule(QWidget* parent = nullptr);
    ~DailySchedule();

private slots:
    void onAddScheduleClicked();
    void onRemoveScheduleClicked();
    void onDateChanged(const QDate& date);
    void onTimeSliderChanged(int value);
    void onSaveData();
    void onLoadData();
    void onClearToday();
    void updateTimeDisplay(int hour, int minute);
    void onImportRoutineClicked();  // 导入日常内容按钮点击事件

    void initializeRow(int row);

private:
    void initUI();
    void initTable();
    void loadScheduleForDate(const QDate& date);
    void saveScheduleForDate(const QDate& date);
    void clearCurrentDay();
    QString getDataFilePath() const;
    void ensureDataDirectory() const;
    QJsonObject scheduleToJson() const;
    void jsonToSchedule(const QJsonObject& json);
    void updateStatistics();
    void initRoutineTasks();  // 初始化日常任务列表

    // UI Components
    QListWidget* listWidget;
    QTableWidget* m_table;
    QDateEdit* m_dateEdit;
    QPushButton* m_addBtn;
    QPushButton* m_removeBtn;
    QPushButton* m_saveBtn;
    QPushButton* m_loadBtn;
    QPushButton* m_clearBtn;
    QSlider* m_timeSlider;
    QLabel* m_timeLabel;
    QSpinBox* m_hourSpin;
    QSpinBox* m_minuteSpin;
    QComboBox* m_taskCombo;
    QComboBox* m_reflectionCombo;

    // Statistics
    QLabel* m_totalTasksLabel;
    QLabel* m_completedLabel;
    QLabel* m_productivityLabel;

    // Data
    QDate m_currentDate;
    QString m_dataDir;


    QMap<QString, QPair<QString, int>> m_routineTasks;  // 日常任务映射：任务名 -> (显示时间, 分钟数)
};

#endif // DAILYSCHEDULE_H